package Buffer2;

import java.io.*;

public class Test7 {//定义一个测试类
    public static void main(String[] args) throws Exception {//main方法入口。抛出异常
        File srcFile = new File("E:\\itcast");//创建源文件路径
        File destFile = new File("F:");//创建目的地文件路径
        copyFolder(srcFile, destFile);
        //调用复制方法，参数一是源文件的目录，参数二是目的地文件目录
    }
    private static void copyFolder(File srcFile, File destFile) throws Exception {
        //定义方法，参数一 是源文件目录，参数二是目的地文件目录
        if (srcFile.isDirectory()) {//对源文件目录进行判断如果是目录
            String name = srcFile.getName();//则获取目录的名称
            File newFolder = new File(destFile, name);//将获取的目录名称包装给F盘
            if (!newFolder.exists()) {//包装后F盘这个目录如果不存在进行进行创建
                newFolder.mkdirs();//
            }
            File[] files = srcFile.listFiles();//获取这个目录下的所有文件
            for (File file : files) {//遍历得到的文件数组
                copyFolder(file, newFolder);//再次作为参数调用方法进行判断
            }
        } else {//如果拿到的文件目录是文件就调用流方法进行写入
            File newFile = new File(destFile, srcFile.getName());
            //写入的前面应该包装一个目录就是F盘下加文件的名称
            copy(srcFile, newFile);
            //调用流方法进行写入，读取的目录来自源文件，因为源文件是一个文件，写入的目录就是包装后的目录
        }
    }
    private static void copy(File file, File newFilefolder) throws Exception {
        //定义方法并抛出异常
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
        //创建字节缓冲输入流对象，参数是源文件的对象
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFilefolder));
        //创建字节缓冲输出流对象，参数是包装后的路径
        byte[] bytes = new byte[1024];//定义读取数据的长度为1024 个字节
        int ten;//定义变量储存读取的有效长度
        while ((ten = bis.read(bytes)) != -1) {//使用while循环进行读取数据
            bos.write(bytes, 0, ten);//使用字节输出流进行读取数据
        }
        bis.close();//关闭字节缓冲输入流资源
        bos.close();//关闭字节缓冲输出流资源
    }
}
